The most common way in which an end-user interacts with a computing device is through applications. Applications are packaged into application binaries, which are serialized representations of the application's programming logic. Operating systems (OSs) provide an application environment (AE), or a set of AEs, one of which is used when the end-user instructs the OS to launch an application binary. The choice of which AE to use and how to deploy the application binary within it is usually the task of a specialized OS component called a loader.
The loader, on instruction from the OS, will attempt to retrieve the application binary from one of the OS services that manages serialized media. Typical serialized media can be physical storage devices (eg: floppy disks, hard drives, ROMs, CDROMs, etc.), networked components and services (eg: network storage, application stores, etc.) or local system non-persistent resources such as main memory (eg: RAM) and other form of caches. The loader then attempts to deserialize the application binary into a storage area designated for execution by the OS. This storage area is typically called a process and is budgeted a set of resources (eg: virtual address space, CPU time, etc.) by the OS. On a successful deserialization operation by the loader and execution of the process by the OS, the application binary becomes an application that is evident to the end-user.
Once an application has been started, it will attempt to consume resources provisioned to it by the OS. Certain resources are privileged and cannot be directly consumed by the application, as they fall under the authority of the OS or a delegated authority (DA) of the OS. An example of such resource ownership is the Graphical User Interface (GUI) subsystem, which typically is managed by an application, called the Window Manager (WM) in the Microsoft Windows™ OS, and is appointed by the OS as the DA for GUIs. In order to use these types of resources, an application must interact with the owning DA, WM in the case of GUI resources, via an OS gateway known as the Application Programming Interface (API). This gateway provides a fundamental abstraction for the OS and DA to manage and arbitrate privileged resources.
The set of resources available to be used by an application, which typically includes both resources that can be consumed directly and those accessed via APIs, is termed as the Application Environment (AE). A compatible AE is fundamental to running any application on a given OS.
Application Environments (AE) have been virtualized in two ways. In one approach, of the host operating system (OS) that provides the specified AE is virtualized. This is typically done with a system hypervisor that uses a combination of hardware and software to replicate the physical machine specification for the OS into a virtual machine. Note that there are at least two OS instances running concurrently in this model. In a second approach, emulation is used to translate the specified AE into that of another which uses a different OS. Note that there are no virtual machines in this model and only one OS is running.